﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace Clinica_Frba
{
    public partial class CancelarAtencionPaciente : Form
    {
        Conexion sqlCon = Conexion.getInstance();
        Utility util = Utility.getInstance();
        public decimal idAfiliado = -1;
        TimeSpan unDia = new TimeSpan(1, 0, 0, 0, 0);

        public CancelarAtencionPaciente()
        {
            InitializeComponent();
        }

        private void CancelarAtencionPaciente_Load(object sender, EventArgs e)
        {
            SqlDataReader reader; 

            this.Text = "Cancelar Turnos";

            // Parametros grid
            dGridTurnos.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            dGridTurnos.MultiSelect = false;

            if (idAfiliado == -1)
                buscarAfiliado.Visible = true;
            else
            {                                      
                reader = sqlCon.execQuery("SELECT (Paciente_Nombre + ' ' + Paciente_Apellido) nom FROM b_sharp.Pacientes WHERE Id_Paciente = " + idAfiliado + ";");
                if (reader.Read())
                {
                    buscarAfiliado.Visible = false;
                    afiliadoBox.Text = reader.GetString(0);
                    loadTurnos();
                }
            }
        }

        private void buscarAfiliado_Click(object sender, EventArgs e)
        {
            SqlDataReader reader;
            BuscarAfiliadoForm afiliadoForm = new BuscarAfiliadoForm();

            idAfiliado = afiliadoForm.searchAfiliado();

            if (idAfiliado != -1)
            {
                reader = sqlCon.execQuery("SELECT (Paciente_Nombre + ' ' + Paciente_Apellido) nom FROM b_sharp.Pacientes WHERE Id_Paciente = " + idAfiliado + ";");
                if (reader.Read())
                {
                    afiliadoBox.Text = reader.GetString(0);
                    loadTurnos();
                }
            }
        }

        private void loadTurnos()
        {
            string select;
            SqlDataAdapter adapter;
            SqlCommand cmd;
            DataTable table = new DataTable();
            DateTime fecha = util.getAppDateTime();

            // Solo se pueden cancelar los turnos con un dia de antelacion
            fecha = fecha.Add(unDia);

            select = "SELECT Turno_Numero, CONVERT(date,Turno_Fecha) Fecha, CONVERT(time,Turno_Fecha) Horario, Medico_Nombre, Medico_Apellido, Esp_Descripcion " +
                         " FROM b_sharp.Turnos tu " +
                         " JOIN b_sharp.Medicos me ON tu.Medico_ID = me.id_medico " +
                         " JOIN b_sharp.Especialidades es ON tu.Medico_Especialidad = es.Cod_Especialidad " + 
                         " WHERE Paciente_ID = " + idAfiliado + 
                         "   AND Turno_Fecha > @fecha" +
                         "   AND not exists (SELECT 1 FROM b_sharp.Cancelaciones ca WHERE tu.Turno_Numero = ca.Turno_Numero)" +
                         "   AND not exists (SELECT 1 FROM b_sharp.Consultas co WHERE tu.Turno_Numero = co.Turno_Num);";

            cmd = new SqlCommand(select,sqlCon.openCon());
            cmd.Parameters.AddWithValue("@fecha",fecha);

            //Llenar Turnos
            adapter = new SqlDataAdapter(cmd);
            adapter.Fill(table);
            
            //Cambiar nombre columnas
            table.Columns[0].ColumnName = "N° Turno";
            table.Columns[3].ColumnName = "Nombre Medico";
            table.Columns[4].ColumnName = "Apellido Medico";
            table.Columns[5].ColumnName = "Especialidad";
            dGridTurnos.DataSource = table;
        }

        private void buttonCancelarTurno_Click(object sender, EventArgs e)
        {
            SqlCommand cmd;
            string insert;
            decimal turnoNro;
            int tipoCan = 1; //Paciente
            string detalle ="";

            if (dGridTurnos.Rows.Count == 0)
            {
                MessageBox.Show("Seleccione un Turno", "Error");
                return;
            }

            turnoNro = (Decimal)dGridTurnos.SelectedRows[0].Cells[0].Value;

            if (InputBox.Show("Motivo de cancelacion", "Detalle:", ref detalle) != DialogResult.OK)
            {
                MessageBox.Show("Ingrese un motivo de cancelacion", "Error");
                return;
            }
            else if (detalle.Length == 0)
            {
                MessageBox.Show("Ingrese un motivo de cancelacion", "Error");
                return;
            }


            insert = "INSERT INTO b_sharp.Cancelaciones (Turno_Numero, Tipo_Cancelacion, Detalle_Cancelacion) " +
                     " VALUES (@turno,@tipoCan,@detalle);";

            cmd = new SqlCommand(insert, sqlCon.openCon());
            cmd.Parameters.AddWithValue("@turno",turnoNro);
            cmd.Parameters.AddWithValue("@tipoCan",tipoCan);
            cmd.Parameters.AddWithValue("@detalle",detalle);

            cmd.ExecuteNonQuery();

            MessageBox.Show("Turno Cancelado", "Cancelar Turno");

            dGridTurnos.Rows.Remove(dGridTurnos.SelectedRows[0]);
        }
    }
}
